//package util;
//
//import org.apache.commons.lang.ObjectUtils;
//import org.apache.velocity.VelocityContext;
//import org.mybatis.generator.api.MyBatisGenerator;
//import org.mybatis.generator.config.Configuration;
//import org.mybatis.generator.config.xml.ConfigurationParser;
//import org.mybatis.generator.internal.DefaultShellCallback;
//
//import java.io.File;
//import java.text.SimpleDateFormat;
//import java.util.*;
//
//import static com.zheng.common.util.StringUtil.lineToHump;
//
///**
// * 代码生成类
// * Created by admin on 2017/1/10.
// */
//public class MybatisGeneratorUtil {
//
////	// generatorConfig模板路径
////	private static String generatorConfig_vm = "/template/generatorConfig.vm";
////	// Service模板路径
////	private static String service_vm = "/template/Service.vm";
////	// ServiceMock模板路径
////	private static String serviceMock_vm = "/template/ServiceMock.vm";
////	// ServiceImpl模板路径
////	private static String serviceImpl_vm = "/template/ServiceImpl.vm";
////
////	/**
////	 * 根据模板生成generatorConfig.xml文件
////	 * @param jdbc_driver   驱动路径
////	 * @param jdbc_url      链接
////	 * @param jdbc_username 帐号
////	 * @param jdbc_password 密码
////	 * @param module        项目模块
////	 * @param database      数据库
////	 * @param table_prefix  表前缀
////	 * @param package_name  包名
////	 */
////	public static void generator(
////			String jdbc_driver,
////			String jdbc_url,
////			String jdbc_username,
////			String jdbc_password,
////			String module,
////			String database,
////			String table_prefix,
////			String package_name,
////			Map<String, String> last_insert_id_tables) throws Exception{
////
////		generatorConfig_vm = MybatisGeneratorUtil.class.getResource(generatorConfig_vm).getPath().replaceFirst("/", "");
////		service_vm = MybatisGeneratorUtil.class.getResource(service_vm).getPath().replaceFirst("/", "");
////		serviceMock_vm = MybatisGeneratorUtil.class.getResource(serviceMock_vm).getPath().replaceFirst("/", "");
////		serviceImpl_vm = MybatisGeneratorUtil.class.getResource(serviceImpl_vm).getPath().replaceFirst("/", "");
////
////		String targetProject = module + "/" + module + "-dao";
////		String basePath = MybatisGeneratorUtil.class.getResource("/").getPath().replace("/target/classes/", "").replace(targetProject, "").replaceFirst("/", "");
////		String generatorConfig_xml = MybatisGeneratorUtil.class.getResource("/").getPath().replace("/target/classes/", "") + "/src/main/resources/generatorConfig.xml";
////		targetProject = basePath + targetProject;
////		String sql = "SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '" + database + "' AND table_name LIKE '" + table_prefix + "_%';";
////
////		System.out.println("========== 开始生成generatorConfig.xml文件 ==========");
////		List<Map<String, Object>> tables = new ArrayList();
////		try {
////			VelocityContext context = new VelocityContext();
////			Map<String, Object> table;
////
////			// 查询定制前缀项目的所有表
////			JdbcUtil jdbcUtil = new JdbcUtil(jdbc_driver, jdbc_url, jdbc_username, AESUtil.AESDecode(jdbc_password));
////			List<Map> result = jdbcUtil.selectByParams(sql, null);
////			for (Map map : result) {
////				System.out.println(map.get("TABLE_NAME"));
////				table = new HashMap<>();
////				table.put("table_name", map.get("TABLE_NAME"));
////				table.put("model_name", lineToHump(ObjectUtils.toString(map.get("TABLE_NAME"))));
////				tables.add(table);
////			}
////			jdbcUtil.release();
////
////			String targetProject_sqlMap = basePath + module + "/" + module + "-rpc-service";
////			context.put("tables", tables);
////			context.put("generator_javaModelGenerator_targetPackage", package_name + ".dao.model");
////			context.put("generator_sqlMapGenerator_targetPackage", package_name + ".dao.mapper");
////			context.put("generator_javaClientGenerator_targetPackage", package_name + ".dao.mapper");
////			context.put("targetProject", targetProject);
////			context.put("targetProject_sqlMap", targetProject_sqlMap);
////			context.put("generator_jdbc_password", AESUtil.AESDecode(jdbc_password));
////			context.put("last_insert_id_tables", last_insert_id_tables);
////			VelocityUtil.generate(generatorConfig_vm, generatorConfig_xml, context);
////			// 删除旧代码
////			deleteDir(new File(targetProject + "/src/main/java/" + package_name.replaceAll("\\.", "/") + "/dao/model"));
////			deleteDir(new File(targetProject + "/src/main/java/" + package_name.replaceAll("\\.", "/") + "/dao/mapper"));
////			deleteDir(new File(targetProject_sqlMap + "/src/main/java/" + package_name.replaceAll("\\.", "/") + "/dao/mapper"));
////		} catch (Exception e) {
////			e.printStackTrace();
////		}
////		System.out.println("========== 结束生成generatorConfig.xml文件 ==========");
////
////		System.out.println("========== 开始运行MybatisGenerator ==========");
////		List<String> warnings = new ArrayList<>();
////		File configFile = new File(generatorConfig_xml);
////		ConfigurationParser cp = new ConfigurationParser(warnings);
////		Configuration config = cp.parseConfiguration(configFile);
////		DefaultShellCallback callback = new DefaultShellCallback(true);
////		MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
////		myBatisGenerator.generate(null);
////		for (String warning : warnings) {
////			System.out.println(warning);
////		}
////		System.out.println("========== 结束运行MybatisGenerator ==========");
////
////		System.out.println("========== 开始生成Service ==========");
////		String ctime = new SimpleDateFormat("yyyy/M/d").format(new Date());
////		String servicePath = basePath + module + "/" + module + "-rpc-api" + "/src/main/java/" + package_name.replaceAll("\\.", "/") + "/rpc/api";
////		String serviceImplPath = basePath + module + "/" + module + "-rpc-service" + "/src/main/java/" + package_name.replaceAll("\\.", "/") + "/rpc/service/impl";
////		for (int i = 0; i < tables.size(); i++) {
////			String model = StringUtil.lineToHump(ObjectUtils.toString(tables.get(i).get("table_name")));
////			String service = servicePath + "/" + model + "Service.java";
////			String serviceMock = servicePath + "/" + model + "ServiceMock.java";
////			String serviceImpl = serviceImplPath + "/" + model + "ServiceImpl.java";
////			// 生成service
////			File serviceFile = new File(service);
////			if (!serviceFile.exists()) {
////				VelocityContext context = new VelocityContext();
////				context.put("package_name", package_name);
////				context.put("model", model);
////				context.put("ctime", ctime);
////				VelocityUtil.generate(service_vm, service, context);
////				System.out.println(service);
////			}
////			// 生成serviceMock
////			File serviceMockFile = new File(serviceMock);
////			if (!serviceMockFile.exists()) {
////				VelocityContext context = new VelocityContext();
////				context.put("package_name", package_name);
////				context.put("model", model);
////				context.put("ctime", ctime);
////				VelocityUtil.generate(serviceMock_vm, serviceMock, context);
////				System.out.println(serviceMock);
////			}
////			// 生成serviceImpl
////			File serviceImplFile = new File(serviceImpl);
////			if (!serviceImplFile.exists()) {
////				VelocityContext context = new VelocityContext();
////				context.put("package_name", package_name);
////				context.put("model", model);
////				context.put("mapper", StringUtil.toLowerCaseFirstOne(model));
////				context.put("ctime", ctime);
////				VelocityUtil.generate(serviceImpl_vm, serviceImpl, context);
////				System.out.println(serviceImpl);
////			}
////		}
////		System.out.println("========== 结束生成Service ==========");
////
////		System.out.println("========== 开始生成Controller ==========");
////		System.out.println("========== 结束生成Controller ==========");
////	}
////
////	// 递归删除非空文件夹
////	public static void deleteDir(File dir) {
////		if (dir.isDirectory()) {
////			File[] files = dir.listFiles();
////			for (int i = 0; i < files.length; i++) {
////				deleteDir(files[i]);
////			}
////		}
////		dir.delete();
////	}
//
//}
